package doit20.sparksql

import org.apache.spark.sql.types.{DataTypes, StructField, StructType}
import org.apache.spark.sql.{DataFrame, SparkSession}

/**
 * @author 涛哥
 * @nick_name "deep as the sea"
 * @contact qq:657270652 wx:doit_edu
 * @site www.doitedu.cn
 * @date 2021-04-09
 * @desc 演示 tempview 和 globalTempView的区别
 */
object Demo2 {
  def main(args: Array[String]): Unit = {

    val spark1 = SparkSession.builder()
      .appName("demo1")
      .master("local[*]")
      .getOrCreate()

    val spark2 = spark1.newSession()



    val df = spark1.read.csv("data/stu.txt")

    // 注册一个session内的视图名
    df.createTempView("a")

    spark1.sql("select * from a").show()

    // a是spark1内命名空间有效，别的sessino(spark2)中看不见；所以这句话会报错(表或视图不存在)
    // spark2.sql("select * from a").show()


    // 注册一个全局的视图名（在所有session之间共享）
    df.createGlobalTempView("b")

    // b是一个global级别的tempview，则查询时需要指定global_temp前缀
    spark1.sql("select * from global_temp.b").show()
    spark2.sql("select * from global_temp.b").show()


    spark1.close()
  }
}
